Wielowarstwowe sieci neuronowe

Uczenie za pomocą gotowych pakietów

Będziemy dziś korzystać z zaawansowanego pakietu do sieci neuronowych "Keras".

Instalacja

  • Pod Windowsem powinno być wszystko zainstalowane.
  • Pod Linuxem można zainstalować lokalnie:
      pip install --user keras
  • Lub na własnym komputerze:
      sudo pip install keras
  • Możliwe, że konieczne jest ponowne uruchomienie IPython, jeśli był uruchomiony podczas instalacji.

Dokumentacja

Zadania

MNIST

  1. Uruchom przykład mnist_mlp.py, warto ew. zmienić liczbę epok do 5
  2. Przeanalizuj kod za pomocą dokumentacji oraz innych źródeł w internecie i opisz w notebooku:
    1. Do jakiej postaci autorzy przykładu sprowadzają dane Y_train i Y_test?
    2. Przedstaw wzór matematyczny na funkcję błędu (pojawiła się na wykładzie)
    3. Ile warstw ma przykładowy model, jakie są rozmiary macierzy odpowiednich wag. Czy można uzyskać dostęp do tych wag?
    4. Jakie funkcje aktywacji użyto? Podaj ich wzory, dla RELU stwórz wykres.
    5. Co to jest Dropout? Czemu służy? Jakie znaczenie ma parametr?
  3. Zmodyfikuj model:
    1. Usuń warstwy Dropout, jaki jest efekt?
    2. Stwórz model odpowiadający 10-klasowej regresji logistycznej (omówiony na wykładzie): jaka jest jakość?
    3. Stwórz 6-cio warstwowy model o rozmiarach warstw 2500, 2000, 1500, 1000, 500 oraz 10 bez Dropout, użyj wszędzie funkcji aktywacji tanh z wyjątkiem ostatniej warstwy, gdzie należy użyć softmax. Trenuj model przez 10 epok.
    4. Dodaj warstwy Dropout, porownaj jakość po 10 epokach.
    5. Zamiast RMSprop użyj algorytm Adagrad, porównaj jakość.

XOR

  1. Pokaż, że jednowarstowa sieć (z jednym neuronem z sigmoidalną funkcją aktywacji) nie potrafi nauczyć się funkcji XOR ale za to AND i OR. Wykorzystaj funkcję model.predict(...). Przyjmyj, że wartości ≤0.1 to 0 oraz wartości ≥0.9 to 1. Jaka funkcja blędu wydaję sie własciwa?
  2. Pokaż, że dwuwarstowy perceptron potrafi nauczyć się funkcji XOR. Wykorzystując model typu Graph, zbuduj następującą sieć:
     x1 -> nh
     x2 -> nh
     x1 -> no
     x2 -> no
     nh -> no
    
    Gdzie x1 i x2 to wejscia, nh to neuron ukryty, no to neuron wyjściowy. Zwróc uwagę, że połączenia wychodzą poza warstwy. Właściwym trybem łączenia wejść do neuronu wyjściowego to merge_mode='concat' (skleja wyjścia poprzednich warstw podanych w inputs=[w1, w2] w jeden ciąg).
  3. Uwaga: Konieczna jest duża liczba epok, ok. 10000. Zbior trenujący to tylko 4 przykłady, zatem to pójdzie szybko.

In [ ]: